package de.hska.kundenverwaltung.db;

import java.io.File;
import java.util.Collection;
import java.util.List;


public interface KundenverwaltungDao {

	/**
	 * @return Alle persistenten Kunden sortiert nach nachname
	 */
	List<Kunde> findAllKunden();
	
	/**
	 * @return Alle Nachnamen von Kunden
	 */
	List<String> findAllNachnamen();

	/**
	 * @return Alle persistenten Kunden sortiert nach ID
	 */
	List<Kunde> findAllKundenId();

	/**
	 */
	List<Kunde> findKundenByNachname(String nachname)
			    throws KundeNotFoundException;
	
	/**
	 */
	List<Kunde> findKundenByNachnamePrefix(String nachnamePrefix);

	/**
	 */
	List<Kunde> findKundenMitBestellungenUndLieferungenByNachname(String nachname, boolean mitLieferungen)
			    throws KundeNotFoundException;

	/**
	 */
	Kunde findKundeById(Long id)
		  throws KundeNotFoundException;

	/**
	 */
	Kunde findKundeMitBestellungenById(Long id)
		  throws KundeNotFoundException;
	
	/**
	 */
	Kunde findKundeByUserName(String loginName)
	      throws KundeNotFoundException;

	/**
	 */
	Collection<Kunde> updateKunden(Collection<Kunde> kunden)
			          throws KundeDeletedException, KundeUpdatedException;

	/**
	 */
	void deleteKunden(Collection<Kunde> kunden);

	/**
	 */
	Collection<Kunde> insertKunden(Collection<Kunde> kunden);

	/**
	 */
	Kunde updateKundeMitBild(Kunde k, byte[] bildBytes, String extension)
	      throws BildException;
	
	/**
	 */
	Kunde updateKundeMitBild(Kunde k, File bildTmpFile, String extension)
	      throws BildException;
}